//app.js
const util = require('utils/util.js');
const urls = require('utils/url.js');
App({
  onLaunch: function () {
    // 展示本地存储能力
    var userInfoStorage = util.getStorageInfo("userInfo");
    // 获取用户信息
    if(userInfoStorage&&userInfoStorage!==null&&userInfoStorage!=="-1000"&&userInfoStorage.auth_key!==''){
      this.authorizeEvent(false);
    }else{
      this.userLoginEvent(true);
    }
  },
  authorizeEvent: function(isLogin){
    var thisObj = this;
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
          thisObj.getwxUserInfo(isLogin);
        }else{
          //授权
          wx.authorize({
            scope:'scope.userInfo',
            success:res => {
              // 可以将 res 发送给后台解码出 unionId
              thisObj.getwxUserInfo(isLogin);
            },
            fail:res => {
              thisObj.globalData.userInfo = null;
              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (thisObj.userInfoUnauthriodCallback) {
                thisObj.userInfoUnauthriodCallback(res)
              }
            }
          })
        }
      }
    })
  },
  userLoginEvent: function(isLogin){
    var thisObj = this;
    wx.login({
      success: function(res) {
        if (res.code) {
          //发起网络请求
          thisObj.codeStr = res.code;
          thisObj.authorizeEvent(isLogin);
        } else {
          console.log('获取用户登录态失败！' + res.errMsg)
        }
      }
    });
  },
  getwxUserInfo :function(isLogin){
    var thisObj = this;
    wx.getUserInfo({
      success: res => {
        // 可以将 res 发送给后台解码出 unionId
        this.globalData.userInfo = res.userInfo;
        if(isLogin){
          var urlstr = urls.login+"&auth_type=1&encryptedData="+res.encryptedData+"&iv="+res.iv+"&code="+thisObj.codeStr;
          util.get(urlstr,(info)=>{
            util.setStorageInfo({'key':'userInfo','value':info});
            if (this.userInfoReadyCallback) {
              this.userInfoReadyCallback(res)
            }
          });
        }else{
          // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
          // 所以此处加入 callback 以防止这种情况
          if (this.userInfoReadyCallback) {
            this.userInfoReadyCallback(res)
          }
        }
      },
      fail:res=>{
        if (this.userInfoUnauthriodCallback) {
          this.userInfoUnauthriodCallback(res)
        }
      }
    })
  },
  globalData: {
    userInfo: null
  }
})
